package com.dabai.qrtools.utils;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.preference.PreferenceManager;

/**
 * Description : SharedPreferences辅助工具
 *
 *
 * 共有四种 读写模式
 *  1.在该模式下,写入的内容会覆盖原文件的内容
 *  Context.MODE_PRIVATE
 *  2.该模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件
 *  Context.MODE_APPEND
 *  3.当前文件可以被其他应用读取
 *  Context.MODE_WORLD_READABLE
 *  4.当前文件可以被其他应用写入
 *  Context.MODE_WORLD_WRITEABLE
 *
 *
 * @author BAI
 */
public class SharedPreferencesUtils {

    /**
     * 获取 默认 的 SharedPreferences
     *
     * @param context 上下文
     * @return {@link SharedPreferences}
     */
    public static SharedPreferences getDefaultSharedPreferences(Context context) {
        return PreferenceManager
                .getDefaultSharedPreferences(context);
    }


    /**
     *
     *  通过 文件名获取 SharedPreferences对象
     *
     *
     * @param context  上下文
     * @param fileName 文件名称
     * @return {@link SharedPreferences}
     */
    public static SharedPreferences getSharedPreferences(Context context, String fileName) {
        return context.getSharedPreferences(fileName, 0);
    }


    /**
     * 获取共享参数编辑器(有4种模式)
     *
     * @param context                上下文
     * @param fileName               文件名称
     * @return {@link SharedPreferences.Editor}
     */
    public static SharedPreferences.Editor getSharedPreferencesEditor(Context context,String fileName,int mode) {
        SharedPreferences sp = context.getSharedPreferences(fileName, mode);
        return sp.edit();
    }


    public interface OnSetSharedPreferences{
        /**
         * 设置共享的偏好
         *
         * @param editor 编辑器
         */
        void setSharedPreferences(SharedPreferences.Editor editor);

        /**
         * 结果
         *
         * @param result 结果
         */
        void result(boolean result);
    }
    /**
     * 提交共享的偏好值
     *
     * @param context                上下文
     * @param fileName               文件名称
     * @param onSetSharedPreferences 在设置共享的偏好
     */
    public static void commitSharedPreferencesValue(Context context,String fileName,OnSetSharedPreferences onSetSharedPreferences) {
        SharedPreferences sp = context.getSharedPreferences(fileName, 0);
        SharedPreferences.Editor editor = sp.edit();
        onSetSharedPreferences.setSharedPreferences(editor);
        onSetSharedPreferences.result(editor.commit());
    }


    /**
     * 读取其他应用程序共享的偏好
     *
     * @param context     上下文
     * @param packageName 包名
     * @param fileName    文件名称
     * @return {@link SharedPreferences}
     */
    @SuppressLint("WorldReadableFiles")
    @Deprecated
    public static SharedPreferences getOtherAppSharedPreferences(Context context, String packageName, String fileName) {
        Context tmpContext = null;
        try {
            tmpContext = context.createPackageContext(packageName,
                    Context.CONTEXT_IGNORE_SECURITY);
        } catch (PackageManager.NameNotFoundException e) {
            return null;
        }
        return tmpContext.getSharedPreferences(fileName, Context.MODE_WORLD_READABLE);
    }



}
